/**
 *
 * @description: 类 和 对象
 * @author: junyong.hong
 * @createTime: 2018/3/29
 * @version: 1.0.0.0
 * @history:
 *    1、
 *    2、
 *
 */
{
    // 基本定义和生成实例
    class Parent{
        // 构造函数
        constructor(name='hjy'){
            this.name = name;
        }
    }
    let v_parent = new Parent('v');
    let v_parent2 = new Parent();
    // {name: "v"}
    console.log('构造函数和实例',v_parent);
    // {name: "hjy"}
    console.log('构造函数和实例',v_parent2);
}

{
    // 继承
    class Parent{
        // 构造函数
        constructor(name='hjy'){
            this.name = name;
        }
    }

    class Child extends Parent{

    }
    // {name: "hjy"}
    console.log('继承', new Child());
}

{
    // 继承传递参数
    class Parent{
        // 构造函数
        constructor(name='hjy'){
            this.name = name;
        }
    }

    class Child extends Parent{
        constructor(name='child'){
            // 修改父类的参数（要把super放在第一行）
            super(name);

            // 子类增加自己的属性
            this.type='childType';
        }
    }
    // {name: "lio", type: "childType"}
    console.log('子类向父类传递参数', new Child('lio'));
}

{
    // getter setter
    class Parent{
        // 构造函数
        constructor(name='hjy'){
            this.name = name;
        }

        get longName(){
            return '姓名：' + this.name
        }

        set longName(value){
            this.name = value;
        }
    }

    let v = new Parent();
    // hjy
    console.log('getter',v.longName);
    v.longName='lio';
    // lio
    console.log('setter',v.longName);
}

{
    // 静态方法（通过类调用，而不是通过类的实例去调用）
    class Parent{
        // 构造函数
        constructor(name='hjy'){
            this.name = name;
        }

        // 静态方法
        static tell(){
            console.log('tell');
        }
    }
    // tell
    Parent.tell();
}

{
    // 静态属性
    class Parent{
        // 构造函数
        constructor(name='hjy'){
            this.name = name;
        }

        // 静态方法（不能定义静态属性）
        static tell(){
            console.log('tell');
        }
    }
    // 静态属性
    Parent.type = 'test';
    // tell
    console.log('静态属性',Parent.type);
}











